<?php

namespace Sdz\BlogBundle\Controller;

use Symfony\Component\Debug\Debug;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Sdz\BlogBundle\Entity\Article;
use Sdz\BlogBundle\Entity\Image;
use Sdz\BlogBundle\Entity\Commentaire;
use Sdz\BlogBundle\Entity\Categorie;
use Sdz\BlogBundle\Entity\ArticleCompetence;


class BlogController extends Controller {
	public function oldIndexAction() {
		// On fixe un id au hasard ici, il sera dynamique par la suite, évidemment
		$id = 5;
		// On veut avoir l'URL de l'article d'id $id.
		//$url = $this->generateUrl('sdzblog_voir', array('id' => $id), true);
		// $url vaut « /blog/article/5 »

		return $this
				->render('SdzBlogBundle:Blog:index.html.twig',
						array('article_id' => '5'));

		// On redirige vers cette URL (ça ne sert à rien, on est d'accord, c'est pour l'exemple !)
		//return $this->redirect($url);

		//return $this->render('SdzBlogBundle:Blog:index.html.twig', array('nom' => 'WINZOO'));
		//return new Response("Hello World !");
	}

	public function byeAction() {
		return $this
				->render('SdzBlogBundle:Blog:bye.html.twig',
						array('nom' => 'WINZOO'));
	}

	//Action avec parametres
	// 	public function voirAction($id)
	//   {
	//     // On récupère la requête
	//     $request = $this->getRequest();
	//     // On récupère notre paramètre tag
	//     $tag = $request->query->get('tag');
	//     $sfd = $request->query->get('sfd');
	//     return new Response("Affichage de l'article d'id : ".$id.", avec le tag : ".$tag. " , avec le sfd: ".$sfd);
	//   }
	// 	public function voirAction($id)
	// 	{
	// 		// On crée la réponse sans lui donner de contenu pour le moment
	// 		$response = new Response;
	// 		// On définit le contenu
	// 		$response->setContent('Ceci est une page d\'erreur 404');
	// 		// On définit le code HTTP
	// 		// Rappelez-vous, 404 correspond à « page introuvable »
	// 		$response->setStatusCode(404);
	// 		// On retourne la réponse
	// 		return $response;
	// 	}

	// 	public function voirAction($id)
	// 	{
	// 		// On utilise le raccourci : il crée un objet Response
	// 		// Et lui donne comme contenu le contenu du template
	// 		return $this->redirect( $this->generateUrl('sdzblog_accueil', array('page' => 2)) );
	// // 		return $this->render('SdzBlogBundle:Blog:voir.html.twig', array(
	// // 				'id'  => $id,
	// // 		));
	// 	}

	// 	public function voirAction($id)
	// 	{
	// 		// Créons nous-mêmes la réponse en JSON, grâce à la fonction json_encode()
	// 		$response = new Response(json_encode(array('id' => $id)));
	// 		// Ici, nous définissons le Content-type pour dire que l'on renvoie du JSON et non du HTML
	// 		$response->headers->set('Content-Type', 'application/json');
	// 		return $response;
	// 		// Nous n'avons pas utilisé notre template ici, car il n'y en a pas vraiment besoin
	// 	}

	// 	public function voirAction($id)
	// 	{
	// 		// Récupération du service
	// 		$mailer = $this->get('mailer');

	// 		// Création de l'e-mail : le service mailer utilise SwiftMailer, donc nous créons une instance de Swift_Message
	// 		$message = \Swift_Message::newInstance()
	// 			->setSubject('Hello zéro !')
	// 			->setFrom('tutorial@symfony2.com')
	// 			->setTo('azaounkahina@gmail.com')
	// 			->setBody('Coucou, voici un email que vous venez de recevoir !');

	// 		// Retour au service mailer, nous utilisons sa méthode « send() » pour envoyer notre $message
	// 		$mailer->send($message);

	// 		// N'oublions pas de retourner une réponse, par exemple une page qui afficherait « L'e-mail a bien été envoyé »
	// 		return new Response('Email bien envoyé');
	// 	}

	public function indexAction($page) {
		// On ne sait pas combien de pages il y a
		// Mais on sait qu'une page doit être supérieure ou égale à 1
		// 		if( $page < 1 )
		// 		{
		// 			// On déclenche une exception NotFoundHttpException
		// 			// Cela va afficher la page d'erreur 404 (on pourra personnaliser cette page plus tard d'ailleurs)
		// 			throw $this->createNotFoundException('Page inexistante (page = '.$page.')');
		// 		}
		// Ici, on récupérera la liste des articles, puis on la passera au template
		// Mais pour l'instant, on ne fait qu'appeler le template

		// 		$mailer = $this->container->get('mailer'); //on a donc accès au container

		// 		$text = "aaa@gmail.com; bbb@yahoo.fr;  ccc@free.fr";

		// 		// On récupère le service
		// 		$antispam = $this->container->get('sdz_blog.antispam');

		// 		// Je pars du principe que $text contient le texte d'un message quelconque
		// 		if ($antispam->isSpam($text)) {
		// 			throw new \Exception('Votre message a été détecté comme spam !');
		// 		}
		// 		// Le message n'est pas un spam, on continue l'action…
		
		
		//Utilisation des repositories
		$nom_categories =array();
		$categories = $this->getDoctrine()->getManager()->getRepository('SdzBlogBundle:Categorie')->findAll();
		foreach ($categories as $categorie){
			array_push($nom_categories, $categorie->getNom());
		}
// 		print_r($nom_categories); die('test');
	
		$liste_articles = $this->getDoctrine()->getManager()->getRepository('SdzBlogBundle:Article')->myFindAll();
		$articles_categorie = $this->getDoctrine()->getManager()->getRepository('SdzBlogBundle:Article')->getAvecCategories($nom_categories);

		return $this->render('SdzBlogBundle:Blog:index.html.twig', array('articles' => $liste_articles));
	}

	public function voirAction($id) {
		// 		$repository = $this->getDoctrine()
		// 											 ->getManager()
		// 											 ->getRepository('SdzBlogBundle:Article');

		// 		$article = $repository->find($id);

		// 		// $article est donc une instance de Sdz\BlogBundle\Entity\Article

		// 		// Ou null si aucun article n'a été trouvé avec l'id $id
		// 		if($article === null){
		// 			throw $this->createNotFoundException('Article[id='.$id.'] innexistant.');
		// 		}

		// 		// Ici, on récupérera l'article correspondant à l'id $id
		// 		return $this->render('SdzBlogBundle:Blog:voir.html.twig', array(
		// 				'article' => $article
		// 		));

// 		// On récupère l'EntityManager
// 		$em = $this->getDoctrine()->getManager();

// 		// On récupère l'entité correspondant à l'id $id
// 		$article = $em->getRepository('SdzBlogBundle:Article')->find($id);

// 		if ($article === null) {
// 			throw $this->createNotFoundException('Article[id=' . $id. '] inexistant.');
// 		}

// 		// On récupère la liste des commentaires
// 		$liste_commentaires = $em->getRepository('SdzBlogBundle:Commentaire')->findAll();

// 		// Puis modifiez la ligne du render comme ceci, pour prendre en compte l'article :
// 		return $this->render('SdzBlogBundle:Blog:voir.html.twig',	array('article' => $article,
// 								'liste_commentaires' => $liste_commentaires));

		// On récupère l'EntityManager
		$em = $this->getDoctrine()->getManager();
		
		// On récupère l'entité correspondant à l'id $id
		$article = $em->getRepository('SdzBlogBundle:Article')->find($id);
		
		if ($article === null) {
			throw $this->createNotFoundException('Article[id='.$id.'] inexistant.');
		}
		
		// On récupère les articleCompetence pour l'article $article
		$liste_articleCompetence = $em->getRepository('SdzBlogBundle:ArticleCompetence')->findByArticle($article->getId());
		
		// Puis modifiez la ligne du render comme ceci, pour prendre en compte les articleCompetence :
		return $this->render('SdzBlogBundle:Blog:voir.html.twig', array(
				'article'			 => $article,
				'liste_articleCompetence'	 => $liste_articleCompetence,
				// … et évidemment les autres variables que vous pouvez avoir
		));

	}

	public function ajouterAction() {
	
	  // On crée un objet Article
	  $article = new Article();
	
	  // On crée le FormBuilder grâce à la méthode du contrôleur
	  $formBuilder = $this->createFormBuilder($article);
	
	  // On ajoute les champs de l'entité que l'on veut à notre formulaire
	  $formBuilder
	    ->add('date',        'date')
	    ->add('titre',       'text')
	    ->add('contenu',     'textarea')
	    ->add('auteur',      'text')
	    ->add('publication', 'checkbox');
	  // Pour l'instant, pas de commentaires, catégories, etc., on les gérera plus tard
	
	  // À partir du formBuilder, on génère le formulaire
	  $form = $formBuilder->getForm();
	
	  // On passe la méthode createView() du formulaire à la vue afin qu'elle puisse afficher le formulaire toute seule
	  return $this->render('SdzBlogBundle:Blog:ajouter.html.twig', array('form' => $form->createView(), ));
		
	}

	
	public function modifierAction($id) {
// 		//     // Ici, on récupérera l'article correspondant à $id

// 		//     // Ici, on s'occupera de la création et de la gestion du formulaire

// 		//     $article = array(
// 		//       'id'      => 1,
// 		//       'titre'   => 'Mon weekend a Phi Phi Island !',
// 		//       'auteur'  => 'winzou',
// 		//       'contenu' => 'Ce weekend était trop bien. Blabla…',
// 		//       'date'    => new \Datetime()
// 		//     );
// 		// 		return $this->render('SdzBlogBundle:Blog:modifier.html.twig', array('article' => $article));

// 		$em = $this->getDoctrine()->getManager();

// 		// On récupère l'article
// 		$article = $em->getRepository('SdzBlogBundle:Article')->find($id);

// 		// On modifie l'URL de l'image par exemple
// 	  $article->getImage()->setUrl('test.png');

// 		// On n'a pas besoin de persister notre article (si vous le faites, aucune erreur n'est déclenchée, Doctrine l'ignore)
// 		// Rappelez-vous, il l'est automatiquement car on l'a récupéré depuis Doctrine

// 		// Pas non plus besoin de persister l'image ici, car elle est également récupérée par Doctrine

// 		// On déclenche la modification
// 		$em->flush();

// 		return new Response('OK');

		
		// On récupère l'EntityManager
		$em = $this->getDoctrine()->getManager();
		
		// On récupère l'entité correspondant à l'id $id
		$article = $em->getRepository('SdzBlogBundle:Article')->find($id);
		
		if ($article === null) {
			throw $this->createNotFoundException('Article[id='.$id.'] inexistant.');
		}
		
		// On récupère toutes les catégories :
		$liste_categories = $em->getRepository('SdzBlogBundle:Categorie')->findAll();
		
		// On boucle sur les catégories pour les lier à l'article
		foreach($liste_categories as $categorie)
		{
			$article->addCategory($categorie);
		}
		
		// Inutile de persister l'article, on l'a récupéré avec Doctrine
		
		// Étape 2 : On déclenche l'enregistrement
		$em->flush();
		
		return new Response('OK');
		

	}

	public function supprimerAction($id) {
// 		// Ici, on récupérera l'article correspondant à $id
// 		// Ici, on gérera la suppression de l'article en question
// 		return $this->render('SdzBlogBundle:Blog:supprimer.html.twig');

		// On récupère l'EntityManager
		$em = $this->getDoctrine()->getManager();
		
		// On récupère l'entité correspondant à l'id $id
		$article = $em->getRepository('SdzBlogBundle:Article')->find($id);
		
		if ($article === null) {
			throw $this->createNotFoundException('Article[id='.$id.'] inexistant.');
		}
		
		// On récupère toutes les catégories :
		$liste_categories = $em->getRepository('SdzBlogBundle:Categorie')->findAll();
		
		// On enlève toutes ces catégories de l'article
		foreach($liste_categories as $categorie)
		{
			// On fait appel à la méthode removeCategorie() dont on a parlé plus haut
			// Attention ici, $categorie est bien une instance de Categorie, et pas seulement un id
			$article->removeCategory($categorie);
		}
		
		// On n'a pas modifié les catégories : inutile de les persister
		
		// On a modifié la relation Article - Categorie
		// Il faudrait persister l'entité propriétaire pour persister la relation
		// Or l'article a été récupéré depuis Doctrine, inutile de le persister
		
		// On déclenche la modification
		$em->flush();
		
		return new Response('OK');
	}

	public function menuAction() {
		// On fixe en dur une liste ici, bien entendu par la suite on la récupérera depuis la BDD !
		$liste = array(array('id' => 2, 'titre' => 'Mon dernier weekend !'),
									 array('id' => 5, 'titre' => 'Sortie de Symfony2.1'),
									 array('id' => 9, 'titre' => 'Petit test'));

		return $this->render('SdzBlogBundle:Blog:menu.html.twig',
					array('liste_articles' => $liste // C'est ici tout l'intérêt : le contrôleur passe les variables nécessaires au template !
						));
	}

	public function OldVoirAction($id) {
		// Récupération du service
		$session = $this->get('session');

		// On récupère le contenu de la variable user_id
		$user_id = $session->get('user_id');

		// On définit une nouvelle valeur pour cette variable user_id
		$session->set('user_id', 91);

		// On n'oublie pas de renvoyer une réponse
		return $this
				->render('SdzBlogBundle:Blog:voir.html.twig',
						array('id' => $id));
		// 		return new Response('Désolé je suis une page de test, je n\'ai rien à dire');
	}

	// On récupère tous les paramètres en arguments de la méthode
	public function voirSlugAction($slug, $annee, $format) {
		// Ici le contenu de la méthode
		return new Response(
				"On pourrait afficher l'article correspondant au slug '"
						. $slug . "', créé en " . $annee . " et au format "
						. $format . ".");
	}

	// Ajoutez cette méthode ajouterAction :
	public function OldAjouterAction() {
		// Bien sûr, cette méthode devra réellement ajouter l'article
		// Mais faisons comme si c'était le cas
		$this->get('session')->getFlashBag()
				->add('info', 'Article bien enregistré');

		// Le « flashBag » est ce qui contient les messages flash dans la session
		// Il peut bien sûr contenir plusieurs messages :
		$this->get('session')->getFlashBag()
				->add('info', 'Oui oui, il est bien enregistré !');

		// Puis on redirige vers la page de visualisation de cet article
		return $this
				->redirect($this->generateUrl('sdzblog_voir', array('id' => 5)));
	}
}
